#pragma once

namespace App {
    class Document;
    class GeoFeature;
}

class PyMethodDef {};
class PyObject {
    
};
class DocumentPy {
public:
    DocumentPy(App::Document *pcObject){}
};
struct GeoFeaturePy {
    GeoFeaturePy(App::GeoFeature* geo_feature){}
};

namespace Py {
    inline PyObject * _None(){return nullptr;}
    class Object {
    public:
        bool isNone(){return false;}
        PyObject* ptr(){return nullptr;}
    };
    class SmartPtr {
    public:
        bool is( PyObject *pother ) const
        {  // identity test
            return false;
        }
        PyObject *ptr() const
        {
            return nullptr;
        }
    };
}

namespace App {
    class FeaturePythonImp {};
    class Part2DObjectPython{};
    class GroupExtensionPython{};
}
namespace Base {
    class PyObjectBase : public PyObject{
    public:
        void setInvalid(){}
    };
    class PyGILStateLocker{};
}

namespace Gui {
    class ViewProviderAttachExtensionPython{};
}
